package br.com.weysolucoes.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import br.com.weysolucoes.conexao.ConexaoBD;
import br.com.weysolucoes.constantes.ConstantesSQL;
import br.com.weysolucoes.dto.SetorDTO;

public class SetorDAO {

	ConstantesSQL constantesSQL = new ConstantesSQL();

	// Cadastra no Banco de Dados um Setor passado como parametro
	
public boolean inserirSetor(SetorDTO setorDTO) throws SQLException {
		
		ConexaoBD conexaoBD = new ConexaoBD();

		Statement st = null;
		ResultSet rs = null;
	
		try {

			st = conexaoBD.connection.createStatement();
			PreparedStatement preparedStatement = conexaoBD.connection
					.prepareStatement(constantesSQL.getSqlInsertSetor());
			preparedStatement.setString(1, setorDTO.getNomeSetor());
			preparedStatement.execute();
			return true;

		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(SetorDAO.class.getName());
			lgr.log(Level.SEVERE, ex.getMessage(), ex);
			return false;
		}
	}

//Lista todos os Setores cadastrados no banco de dados
	public List<SetorDTO> listSetor() throws SQLException{
		
		ConexaoBD conexaoBD = new ConexaoBD();
		ArrayList<SetorDTO> lista = new ArrayList<SetorDTO>();
		Statement st = null;
		ResultSet rs = null;
		
		try {
			st = conexaoBD.connection.createStatement();

			String sql = constantesSQL.getSqlSelectSetor();
			rs = st.executeQuery(sql);
			
			while (rs.next()) {

				SetorDTO setorDTO = new SetorDTO();
				setorDTO.setIdSetor(rs.getInt(1));
				setorDTO.setNomeSetor(rs.getString(2));
				lista.add(setorDTO);
			}
			
		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(SetorDAO.class.getName());
			lgr.log(Level.SEVERE, ex.getMessage(), ex);
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (st != null) {
					st.close();
				}
				if (conexaoBD.connection != null) {
					conexaoBD.connection.close();
				}
			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(SetorDAO.class.getName());
				lgr.log(Level.WARNING, ex.getMessage(), ex);
			}

		}

		return lista;
	}
	
	// Remove setores cadastrados no banco de dados
		public boolean deletarSetor(SetorDTO setorDTO) throws SQLException {

			ConexaoBD conexaoBD = new ConexaoBD();

			Statement st = null;
			ResultSet rs = null;
			
			try {

				st = conexaoBD.connection.createStatement();
				PreparedStatement preparedStatement = conexaoBD.connection
						.prepareStatement(ConstantesSQL.getSqlDeleteSetor());
				preparedStatement.setInt(1, setorDTO.getIdSetor());
				preparedStatement.executeUpdate();
				return true;
				
			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(SetorDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;
			}
		}
		
		// Edita todos os setores cadastrados no banco de dados
		public boolean editarSetor(SetorDTO setorDTO) throws SQLException {

			ConexaoBD conexaoBD = new ConexaoBD();
			Statement st = null;
			ResultSet rs = null;
			
			try {

				st = conexaoBD.connection.createStatement();

				PreparedStatement preparedStatement = conexaoBD.connection
						.prepareStatement(ConstantesSQL.getSqlUpdateSetor());
				preparedStatement.setString(1, setorDTO.getNomeSetor());
				preparedStatement.setInt(2, setorDTO.getIdSetor());
				preparedStatement.executeUpdate();
				return true;
				
			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(SetorDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;
		}

	}

}
